// lodash 中的函数组合的方法 _.flowRight()
// const _ = require('lodash')



// reduce方法接收一个函数作为累加器，数组中的每个值（从左到右）开始缩减，最终计算为一个值
// function compose(...args){
//   return function (value) {
//     return args.reverse().reduce(function(acc,fn){
//       return fn(acc)
//     },value)
//   }
// }

/**
 * 模拟lodash 中的函数组合的方法 _.flowRight()
 * 会有多个入参（每个入参都是纯函数）所以用剩余函数
 * 先做倒序，然后依次执行（每一个方法依次去处理数据）
 * 返回的应该是最终处理结果
 * @param  {...any} args 
 */
const compose= (...args)=>(value)=>args.reverse().reduce((arr,fn)=>fn(arr),value)

const reverse = arr => arr.reverse()
const first = arr => arr[0]
const toUpper = s => s.toUpperCase()
/**
 * 
 */
const f = compose(toUpper, first, reverse)
console.log(f(['one', 'two', 'three']))
